// 全局提示引入
import { message } from "ant-design-vue";
import router from '../router/index'
// 引入vuex
import store from "../store/index";
// console.log(store.state["authorization"],"拿到了token");

// 引入axios
import axios from "axios";

// 创建 axios 实例
const requests = axios.create({
  baseURL: "turn", // baseURL: 'http://168.192.0.123',
  withCredentials: true, //携带token
  timeout: 6000, // 请求超时时间
});

// 设置请求次数，请求的间隙
requests.defaults.retry = 4;
requests.defaults.retryDelay = 1000;

// 请求拦截   取token或者设置token
// request interceptor
requests.interceptors.request.use(
  (config) => {
    // 取出token赋值
    const token =
      localStorage.getItem("authorization") || store.state.authorization;
    if (token) {
      // let each request carry token
      // ['X-CSRF-TOKEN'] is a custom headers key
      // please modify it according to the actual situation
      config.headers["authorization"] = token;
    }

    // 全局转圈圈
    store.dispatch("changeloadingsAsync", true);

    return config;
  },
  (error) => {
    // do something with request error
    console.log(error); // for debug
    return Promise.reject(error);
  }
);

// 响应拦截器
requests.interceptors.response.use(
  (response) => {
    // 全局转圈消失
    store.dispatch("changeloadingsAsync", false);

    //如果接口返回token，替换本地旧token
    if (response.headers.authorization) {
      localStorage.setItem("authorization", response.headers.authorization);
    }
    // //自定义设置后台返回code对应的响应方式
    // // response.data.code == 200
    if (response.status == 200) {
      // 如果有数据就抛出数据
      return response;
    } else {
      //接口正常，返回数据
      return response;
    }
  },
  (err) => {
    // 全局弹窗提示返回的错误信息
    // 全局转圈消失
    store.dispatch("changeloadingsAsync", false);

    console.log(err.response, "错误");

    switch (err.response) {
      case 401:
        message.error('登录过期')
        router.replace('/login')
        break
      case 429:
        message.error('操作频繁')
        break
      case 500:
        message.error('服务器错误')
        break
      case 504:
        message.error('请求超时')
        break
      default:
        message.error('未知错误')
        break
    }

    // if (err.response) {
    //   message.error(err.response.data.message);
    // }

    // if (err.response == undefined) {
    //   message.error(
    //     "Unexpected error, please try again，意料之外的错误，请重试"
    //   );
    // }
    // if (err.response.status) {
    //   // 如果401 就让他 重定向到首页
    //   if (err.response.status == 401) {
    //     // 全局弹窗错误信息
    //     message.error(err.response.data.message);
    //     localStorage.clear("authorization");
    //   }
    //   if (err.response.status == 403) {
    //     // 全局弹窗错误信息
    //     message.error("You have no access");
    //   }
    // }

 
    return Promise.reject(err);
  }
);

// 到处axios的请求
export default { requests };
